package tree;

public interface IBinaryTree<T> {
    boolean isEmpty();

    //插入x作为根结点，原根结点作为x的左孩子；返回插入结点
    BinaryNode<T> insert(T x);

    //插入x为parent结点的左/右孩子，leftChild指定孩子，取值为true（左）、false（右）；
    //parent的原左/右孩子成为x结点的左/右孩子；返回插入结点。
    BinaryNode<T> insert(BinaryNode<T> parent, T x, boolean leftChild);

    int size();

    int height();

    void remove(BinaryNode<T> parent, boolean leftChild);

    void clear();

    void preOrder();

    void inOrder();

    void postOrder();

    void preOrderTraverse();

    void inOrderTraverse();

    void levelOrder();
}
